/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.losalpes.promocion;

import com.losalpes.persistence.entity.Promocion;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.ejb.Stateful;
import javax.ejb.Stateless;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;

/**
 *
 * @author Alejandra
 */
@Stateful
public class PromocionServices implements IPromocionServices {

    private Promocion cPromocion;
    @Resource(mappedName = "jms/PromocionesTopicFactory")
    private ConnectionFactory connectionFactory;
    @Resource(mappedName = "jms/PromocionTopic")
    private Topic topic;

    public PromocionServices() {
        
    }

    /**
     * crea o modifica una promoción
     * @param promocion promoción a ser creada/actualizada
     * @return promoción creada/actualizada
     */
    public Promocion createOrUpdate(Promocion promocion) {
        cPromocion = promocion;
        //if (cPromocion.getDescripcion() == null || cPromocion.getDescripcion().isEmpty()) {
        //}
        try {
            notificarPromocion();
        } catch (JMSException ex) {
            Logger.getLogger(PromocionServices.class.getName()).log(Level.SEVERE, "Error enviando la notificación de modificación de un venedor", ex);
        }

        return cPromocion;
    }

    /**
     * Hace la notificación (envío de mensaje) de la creación de la promoción
     * @throws javax.jms.JMSException en caso de algún error en la mensajería
     */
    public void notificarPromocion() throws JMSException {
        Connection connection = connectionFactory.createConnection();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        MessageProducer messageProducer = session.createProducer((Destination) topic);
        try {            
            messageProducer.send(createPromocionMessage(session));
        } catch (JMSException ex) {
            Logger.getLogger(PromocionServices.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (session != null) {
                try {
                    session.close();
                } catch (JMSException e) {
                    Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Error cerrando la sesión", e);
                }
            }
            if (connection != null) {
                connection.close();
            }
        }
    }

    /**
     * 
     * @param session
     * @return
     * @throws javax.jms.JMSException
     */
    private ObjectMessage createPromocionMessage(Session session) throws JMSException {
        //String msg = "Promocion: " + cPromocion.getDescripcion() + "\n";
        ObjectMessage om = session.createObjectMessage();
        om.setObject(cPromocion);
        //TextMessage tm = session.createTextMessage();
        //tm.setText(msg);
        return om;

    }
}
